/*
 * highOrderApproximation.h
 *
 *  Created on: 14/05/2009
 *      Author: rogerio
 */

#ifndef HIGHORDERSATURATION_H_
#define HIGHORDERSATURATION_H_

#include "SL__functions.h"
//#include "TMesh.h"
//#include "SimulatorParameters.h"

namespace PRS{

	class HighOrderApproximation{
	public:
		HighOrderApproximation();
		HighOrderApproximation(SimulatorParameters* pSimPar);
		~HighOrderApproximation();

		// To calculate fluxes with high order approximation for saturation field.Arguments: edge pointer, domain flag, Sw_I, Sw_J, respectively.
		virtual double getSw_HighOrderApproximation(SimulatorParameters* pSimPar, EdgeData* edata, int dim, double& Sw_II, double& Sw_JJ);

		NodeSlopeLimiter* getNodeSL_Ptr(){
			return pNodeSL;
		}

	private:

		// Slope limiter function pointers
		EdgeSlopeLimiter* pEdgeSL;
		NodeSlopeLimiter* pNodeSL;

		NodeSlopeLimiter* getNodeSlopeLimitFunc(SimulatorParameters* pSimPar);
		EdgeSlopeLimiter* getEdgeSlopeLimitFunc(SimulatorParameters* pSimPar);

		double koef;
	};
}

#endif /* HIGHORDERAPPROXIMATION_H_ */
